K8s 线上采坑 01 Cronjob 以小时以上周期无法在指定时间触发

发现问题: Cronjob 以小时以上周期运行, 无法在指定时间触发

例如如下 Cronjob

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: quant-profit-collector
spec:
schedule: '*/1 * * * *'
jobTemplate:
spec:
template:
spec:
containers:
- name: quant-profit-collector
image: busybox
command:
- ls
- /
restartPolicy: OnFailure

具体执行内容无需在意, 我们看 schedule 配置为

  • */1 * * * *, 表示每分钟运行一次, 经部署可以正常运行
  • 0 */1 * * * 表示每小时的 0 分 运行一次, 经部署可以正常运行.
  • 0 12 * * * 表示每天的 12 点 0 分 运行一次, 经部署发现到时间并没触发. 同样的问题, 在指定任何特定的 某小时某分钟 的时候无法执行.

排查问题

经过长时间的测试, 发现预定在 12 点 0 分运行的服务, 在晚上 8 点 0 分的时候执行了.

忽然恍然大悟, 应该是 k8s 的 cronjob 里面用的时区与外部 node 主机时区不一致

解决问题

在 container 配置中, 配置 TZ 环境变量

1
2
3
4
5
6
7
---
containers:
- name: quant-profit-collector
image: busybox
env:
- name: TZ
value: Asia/Shanghai

参考: 同步 pod 时区与 node 主机保持一致

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.